
/***
 * 发起人
 */
class Originator {


    setState( state) {
        this.state = state;
    }

    getState() {
        return this.state;
    }

    /**
     * 将当前状态存储到备忘录中
     */
    createMemento() {
        return new Memento(this.state);
    }

    /**
     * 从备忘录中恢复状态
     */
    restoreFromMemento(memento) {
        this.state = memento.getState();
    }

}
/**
 * 备忘录
 */
class Memento {

    constructor( state) {
        this.state = state;
    }

    getState() {
        return this.state;
    }

}
/***
 * 负责人
 */
class Caretaker {
    /**
     * 存储备忘录
     */
    storeMemento( memento) {
        this.memento = memento;
    }

    /**
     * 获取备忘录
     */
    retrieveMemento() {
        return this.memento;
    }

}

function test(){
    const originator = new Originator(); // 创建发起人对象
    const caretaker = new Caretaker(); // 创建负责人对象
    originator.setState("State1"); // 设置状态
    caretaker.storeMemento(originator.createMemento()); // 将备忘录存储到负责人中
    originator.setState("State2"); // 改变状态
    // 从备忘录恢复当前状态
    originator.restoreFromMemento(caretaker.retrieveMemento());
    console.log("Current state: " + originator.getState());
}

test()